package com.oschat.service;

import java.util.List;

import com.oschat.entity.dto.TokenUserInfoDto;
import com.oschat.entity.dto.UserContactSearchResultDto;
import com.oschat.entity.enums.UserContactStatusEnum;
import com.oschat.entity.query.UserContactQuery;
import com.oschat.entity.po.UserContact;
import com.oschat.entity.vo.PaginationResultVO;


/**
 * 联系人 业务接口
 */
public interface UserContactService {

    /**
     * 根据条件查询列表
     */
    List<UserContact> findListByParam(UserContactQuery param);

    /**
     * 根据条件查询列表
     */
    Integer findCountByParam(UserContactQuery param);

    /**
     * 分页查询
     */
    PaginationResultVO<UserContact> findListByPage(UserContactQuery param);

    /**
     * 新增
     */
    Integer add(UserContact bean);

    /**
     * 批量新增
     */
    Integer addBatch(List<UserContact> listBean);

    /**
     * 批量新增/修改
     */
    Integer addOrUpdateBatch(List<UserContact> listBean);

    /**
     * 多条件更新
     */
    Integer updateByParam(UserContact bean, UserContactQuery param);

    /**
     * 多条件删除
     */
    Integer deleteByParam(UserContactQuery param);

    /**
     * 根据UserIdAndContactId查询对象
     */
    UserContact getUserContactByUserIdAndContactId(String userId, String contactId);


    /**
     * 根据UserIdAndContactId修改
     */
    Integer updateUserContactByUserIdAndContactId(UserContact bean, String userId, String contactId);


    /**
     * 根据UserIdAndContactId删除
     */
    Integer deleteUserContactByUserIdAndContactId(String userId, String contactId);

    /**
     * @description: 根据contactId搜索联系人
     * @param: userId
     * contactId
     * @return: com.oschat.entity.dto.UserContactSearchResultDto
     * @author 绿竹
     * @date: 2025/2/11 16:51
     */
    UserContactSearchResultDto searchContact(String userId, String contactId);

    Integer applyAdd(TokenUserInfoDto tokenUserInfoDto, String contactId, String applyInfo);

    void removeUserContact(String userId, String contactId, UserContactStatusEnum statusEnum);

    /**
     * 添加联系人
     */
    void addContact(String applyUserId,String receiveUserId,String contactId,Integer contactType,String applyInfo);
}